# -*- coding: utf-8 -*-
import webapp2
import exceptions

from number import Number
from webapp2 import uri_for



class ViewNumbers(webapp2.RequestHandler):

    # GET-запрос, так обычно получают web-страницы
    def get(self, *args, **kwargs):
        total = 0
        numbers_query = Number.query().order(Number.date)   # Получить все записи в определённом порядке.
        # Вывод в html можно сделать проще, но пока достаточно такого.
        self.response.write('<html><body>Numbers : <ul>')
        for number in numbers_query:
            total = total + number.value
            self.response.write('<li>%d</li>' % (number.value)) # Подстановка в нужное место строки.
        self.response.write("""</ul>
        Total : %d <br>
        <form action="%s" method="post"><input type="submit" value="Clear values"></form>
        <form action="%s" method="post">
            <label for="number">New number:</label>
            <input id="number" type="text" name="number">
            <input type="submit" name="Add">
        </form>
        Значения появляются с небольшой задержкой, сразу после добавления/очистки есть смысл обновить страницу.
        </body>
        </html>""" % (total, uri_for('clear'), uri_for('add')))
        # uri_for передаётся та же строка, что указана в router.py, а она выдаёт правильный путь к нужной странице.


class ClearNumbers(webapp2.RequestHandler):
    def __init__(self, *args, **kwargs):
        super(ClearNumbers, self).__init__(*args, **kwargs)
    # POST-запрос, так обычно обрабатывают ввод/действия пользователя, меняющие данные
    def post(self, *args, **kwargs):
        total = 0
        for key in Number.query().iter(keys_only=True): # Вытаскиваем только ключи записей, и удаляем всё.
            key.delete()
        self.redirect(uri_for('show')) # После чего перенаправляем на страницу отображения


class AddNumber(webapp2.RequestHandler):
    def __init__(self, *args, **kwargs):
        super(AddNumber, self).__init__(*args, **kwargs)

    def post(self, *args, **kwargs):
        try:
            value = int(self.request.get('number'))
        except exceptions.ValueError:
            # Тут было бы неплохо сообщить об ошибке, но пока не будем усложнять код.
            self.redirect(uri_for('show'))
            return
        new_number = Number(value=value) # Создаём новое число
        new_number.put()                 # и записываем его
        self.redirect(uri_for('show'))
